GDK W32: Use SWP_NOOWNERZORDER everywhere it can be applied
authorРуслан Ижбулатов <lrn1986@gmail.com>
Sun, 17 Jun 2018 10:58:16 +0000 (10:58 +0000)
committerРуслан Ижбулатов <lrn1986@gmail.com>
Sun, 17 Jun 2018 10:59:49 +0000 (10:59 +0000)
There is no reason why we shouldn't pass this flag every time
Z-order changes. We have separate routines that are used to
maintain relative Z-order, so it should be completely OK to
pass SWP_NOOWNERZORDER to let the OS know that it shouldn't try
to maintain relative Z-order of the windows when raising them.

gdk/win32/gdkevents-win32.c
gdk/win32/gdksurface-win32.c

index e69cd1e3722dff92e34f907271639b50ff1c3cd7..e02e2c8133041d66b938d85a8d971d7e7613b903 100644 (file)
@@ -1897,7 +1897,7 @@ ensure_stacking_on_unminimize (MSG *msg)
                g_print (" restacking %p above %p",
                         msg->hwnd, lowest_transient));
       SetWindowPos (msg->hwnd, lowest_transient, 0, 0, 0, 0,
-                   SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
+                   SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_NOOWNERZORDER);
     }
 }
 
@@ -1978,7 +1978,7 @@ ensure_stacking_on_activate_app (MSG       *msg,
       impl->transient_owner != NULL)
     {
       SetWindowPos (msg->hwnd, HWND_TOP, 0, 0, 0, 0,
-                   SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
+                   SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_NOOWNERZORDER);
       return;
     }
 
@@ -2020,7 +2020,7 @@ ensure_stacking_on_activate_app (MSG       *msg,
                    g_print (" restacking %p above %p",
                             msg->hwnd, rover));
          SetWindowPos (msg->hwnd, rover, 0, 0, 0, 0,
-                       SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
+                       SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_NOOWNERZORDER);
           break;
        }
     }
index 4b5adb4924f524edeae41ba455805d1b95c52d07..a23d403a07941577794e266ad4f5a355f7903a3d 100644 (file)
@@ -1199,7 +1199,7 @@ show_window_internal (GdkSurface *window,
       API_CALL (SetWindowPos, (GDK_SURFACE_HWND (window),
                               (window->state & GDK_SURFACE_STATE_ABOVE)?HWND_TOPMOST:HWND_NOTOPMOST,
                               0, 0, 0, 0,
-                              SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE));
+                              SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOOWNERZORDER));
     }
 }
 
@@ -1468,7 +1468,7 @@ gdk_win32_surface_raise (GdkSurface *window)
       else
         API_CALL (SetWindowPos, (GDK_SURFACE_HWND (window), HWND_TOP,
                                 0, 0, 0, 0,
-                                SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE));
+                                SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_NOOWNERZORDER));
     }
 }
 
@@ -1485,7 +1485,7 @@ gdk_win32_surface_lower (GdkSurface *window)
 
       API_CALL (SetWindowPos, (GDK_SURFACE_HWND (window), HWND_BOTTOM,
                               0, 0, 0, 0,
-                              SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE));
+                              SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_NOOWNERZORDER));
     }
 }
 
@@ -2427,7 +2427,7 @@ _gdk_win32_surface_update_style_bits (GdkSurface *window)
   rect.right += after.right - before.right;
   rect.bottom += after.bottom - before.bottom;
 
-  flags = SWP_FRAMECHANGED | SWP_NOACTIVATE | SWP_NOREPOSITION;
+  flags = SWP_FRAMECHANGED | SWP_NOACTIVATE | SWP_NOREPOSITION | SWP_NOOWNERZORDER;
 
   if (will_be_topmost && !was_topmost)
     {
@@ -4881,7 +4881,7 @@ gdk_win32_surface_fullscreen (GdkSurface *window)
 
       API_CALL (SetWindowPos, (GDK_SURFACE_HWND (window), HWND_TOP,
                 x, y, width, height,
-                SWP_NOCOPYBITS | SWP_SHOWWINDOW));
+                SWP_NOCOPYBITS | SWP_SHOWWINDOW | SWP_NOOWNERZORDER));
     }
 }
 
@@ -4904,7 +4904,7 @@ gdk_win32_surface_unfullscreen (GdkSurface *window)
       API_CALL (SetWindowPos, (GDK_SURFACE_HWND (window), HWND_NOTOPMOST,
                               fi->r.left, fi->r.top,
                               fi->r.right - fi->r.left, fi->r.bottom - fi->r.top,
-                              SWP_NOCOPYBITS | SWP_SHOWWINDOW));
+                              SWP_NOCOPYBITS | SWP_SHOWWINDOW | SWP_NOOWNERZORDER));
 
       g_object_set_data (G_OBJECT (window), "fullscreen-info", NULL);
       g_free (fi);
@@ -4930,7 +4930,7 @@ gdk_win32_surface_set_keep_above (GdkSurface *window,
       API_CALL (SetWindowPos, (GDK_SURFACE_HWND (window),
                               setting ? HWND_TOPMOST : HWND_NOTOPMOST,
                               0, 0, 0, 0,
-                              SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE));
+                              SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOOWNERZORDER));
     }
 
   gdk_synthesize_surface_state (window,
@@ -4956,7 +4956,7 @@ gdk_win32_surface_set_keep_below (GdkSurface *window,
       API_CALL (SetWindowPos, (GDK_SURFACE_HWND (window),
                               setting ? HWND_BOTTOM : HWND_NOTOPMOST,
                               0, 0, 0, 0,
-                              SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE));
+                              SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOOWNERZORDER));
     }
 
   gdk_synthesize_surface_state (window,